package ar.com.sgsvm.dao.sqlite;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import ar.com.sgsvm.dao.IProvinciaDao;
import ar.com.sgsvm.dao.SqliteDaoFactory;
import ar.com.sgsvm.entity.Provincia;
import ar.com.sgsvm.exceptions.NonexistentEntityException;

public class ProvinciaSqliteDao implements IProvinciaDao {

	@Override
	public Long create(Provincia provincia) throws Exception {
		ContentValues contentValues = new ContentValues();
		contentValues.put("nombre", provincia.getNombre());
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		return sqliteDaoFactory.open().insert("Provincia", null, contentValues);
	}

	@Override
	public List<Provincia> readAll() throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		SQLiteDatabase sqliteDatabase = sqliteDaoFactory.open();
		Cursor cursor = sqliteDatabase.query("Provincia", null, null, null, null, null, null);
		List<Provincia> provincias = new ArrayList<Provincia>();
		if (cursor.moveToFirst()) {
			do {
				Provincia provincia = new Provincia();
				Long idProvincia = cursor.getLong(cursor.getColumnIndex("idProvincia"));
				String nombre = cursor.getString(cursor.getColumnIndex("nombre"));
				provincia.setIdProvincia(idProvincia);
				provincia.setNombre(nombre);
				provincias.add(provincia);

			} while (cursor.moveToNext());
		}
		cursor.close();
		return provincias;
	}

	@Override
	public Provincia readById(Long idProvincia) throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		SQLiteDatabase sqliteDatabase = sqliteDaoFactory.open();
		Cursor cursor = sqliteDatabase.query("Provincia", null, "idProvincia = ?", new String[] { String.valueOf(idProvincia) }, null, null, null);
		if (cursor.moveToFirst()) {
			Provincia provincia = new Provincia();
			provincia.setIdProvincia(idProvincia);
			provincia.setNombre(cursor.getString(cursor.getColumnIndex("nombre")));
			cursor.close();
			return provincia;
		} else {
			throw new NonexistentEntityException("No existe la provincia con id " + String.valueOf(idProvincia));
		}
	}

	@Override
	public void update(Provincia provincia) throws Exception {
		ContentValues contentValues = new ContentValues();
		contentValues.put("nombre", provincia.getNombre());
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		sqliteDaoFactory.open().update("Provincia", contentValues, "idProvincia = ?", new String[] { String.valueOf(provincia.getIdProvincia()) });
	}

	@Override
	public void delete(Provincia provincia) throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		sqliteDaoFactory.open().delete("Producto", "idProducto = ?", new String[] { String.valueOf(provincia.getIdProvincia()) });
	}

}
